什麼是氣泡排序法?
氣泡排序法是一種簡單的排序演算法,透過重複地比較相鄰的元素,如果順序不對就交換它們,直到整個陣列排序完成。
演算法特點
- 簡單易懂:邏輯清晰,容易實現
- 穩定排序:相等元素的相對位置不改變
- 原地排序:不需要額外的記憶體空間
- 效率較低:適合小規模資料
排序原理
逐次比較相鄰兩個元素,將較大(或較小)的元素向後(或向前)移動,如同氣泡上升一樣,故稱為「氣泡排序」。
互動演示
比較次數:0
交換次數:0
當前步驟:就緒
Bubble Sort - 可視化演示與詳細解釋
氣泡排序法是一種簡單的排序演算法,透過重複地比較相鄰的元素,如果順序不對就交換它們,直到整個陣列排序完成。
逐次比較相鄰兩個元素,將較大(或較小)的元素向後(或向前)移動,如同氣泡上升一樣,故稱為「氣泡排序」。
比較次數:0
交換次數:0
當前步驟:就緒
| 情景 | 時間複雜度 | 說明 |
|---|---|---|
| 最好情況 | O(n) | 陣列已排序,只需一次掃描 |
| 平均情況 | O(n²) | 隨機排列的陣列 |
| 最壞情況 | O(n²) | 陣列反向排序,需要最多比較 |
| 空間複雜度 | O(1) | 原地排序,僅需常數額外空間 |
這裡展示 Bubble Sort 的核心邏輯,從演算法虛擬碼到 JavaScript 實作的對應。
function bubbleSort(arr):
n = length(arr)
for i in 0..n-2:
swapped = false
for j in 0..n-i-2:
if arr[j] > arr[j+1]:
swap(arr, j, j+1)
swapped = true
if not swapped:
break
async function bubbleSort() {
const n = array.length;
for (let i = 0; i < n - 1; i++) {
let swapped = false;
for (let j = 0; j < n - i - 1; j++) {
if (!isSorting) return;
if (array[j] > array[j + 1]) {
await swap(j, j + 1);
swapped = true;
}
}
if (!swapped) break;
}
}
const n = array.length; -> 初始化資料長度,準備整體動畫範圍
for (let i ... ) -> 每一輪掃描開始,標示已排序右側區域
for (let j ... ) -> 比較相鄰兩根長條,動畫中高亮它們
if (array[j] > array[j + 1]) -> 判斷是否需交換
await swap(j, j + 1); -> 觸發兩根長條交換動畫
if (!swapped) break; -> 偵測是否需要提前結束動畫